{{tag>Dapper Gutsy Jaunty administration système console BROUILLON}}

====== Screen le multiplexeur de terminaux ======

**Screen** (Gnu/Screen) est un utilitaire permettant d'ouvrir plusieurs terminaux dans une même console, de passer de l'un à l'autre et de les récupérer plus tard. Il offre d'autres services très utiles comme :
  * La possibilité d'attacher et de détacher une session, pratique pour reprendre la main sur un [[:irssi]].
  * La possibilité de partager un terminal avec un autre utilisateur, idéal pour aider un utilisateur distant.

===== Pré-requis =====

  * Disposer des [[:sudo|droits d'administration]] ;
  * Disposer d'une connexion à Internet configurée et activée ;
  * Avoir activé l'accès aux [[:depots#universe_et_multiverse|dépôts Universe et Multiverse]] ;

===== Installation =====

[[:tutoriel:comment_installer_un_paquet|Installez le paquet]] **screen**.

[[apt://screen|screen]]

<note tip>Screen est disponible par défaut depuis Jaunty Jackalope, il bénéficie en plus de trois profils aux choix relativement intéressants pour ceux qui n'auraient pas déjà fait le leur. </note>

===== Exemple d'utilisation de screen =====

Nous allons lancer dans le //screen// une application en ligne de commande, puis 'nous détacher' de la session du //screen// en laissant l'application  tourner dedans. Ensuite, à partir du même poste ou d'un poste distant (avec [[:ssh]] par exemple) nous pourrons 'nous rattacher' à la session du //screen// et récupérer exactement la même chose que lorsque nous nous étions détaché.

  * Lancer screen en nommant la session

<code>screen -S nom_de_la_session</code>

Un message annoncant la version utilisée et indiquant que ce programme est publiée sous licence GPL s'affiche à l'écran. Il ne reste plus qu'à presser la touche [ESPACE].

La nouvelle session du //shell// s'affiche et attend qu'on tape une commande.
Par exemple
<code>echo test</code>

Le //shell// se présente alors comme ça
<code>
  foo@bar $ echo test
  test
  foo@bar $
</code>

  * Pour se détacher de la session du screen :

Taper la suite de touche clavier suivante : [CTRL]+[a] suivi de [d]

OU fermer le terminal et/ou ouvrir un autre terminal

  * Pour se rattacher à la session du screen

<code>screen -r nom_de_la_session</code>

<note tip>
Le rattachement à la session du screen peut très bien se faire à distance. Nous accédons alors à notre machine via un accès [[:ssh]] par exemple.
</note>

===== Utilisation =====

==== Lancement de screen ====

  * Créer un nouveau //screen// : <code>screen -S toto</code>

Une fois passé l'écran de version, nous avons devant nous un terminal prêt à servir, nous pouvons l'utiliser comme d'habitude (en dehors des applications en mode graphique).

  * Connaître les //screen// existants : <code>screen -ls</code>

  * Rattacher un //screen// existant : <code>screen -r</code>
<note tip>
Si plusieurs //screens// sont en cours, voilà ce que screen -r va afficher:

<code>
There are several suitable screens on: 
      13379.toto1 (Detached) 
      13308.toto2 (Detached) 
      13356.toto3 (Dead ???)

Type "screen [-d] -r [pid.]tty.host" to resume one of them.
</code>

Nous avons donc le choix entre plusieurs //screens// que l'on va préciser simplement par
<code>screen -r 13379</code>
ou
<code>screen -r toto1</code>
</note>

<note tip>
Si un screen est mort (toto3 dans l'exemple ci-dessus), il est possible de le supprimer en tapant la commande 
<code>
screen -wipe
</code>
</note>

<note tip>
Si le screen que nous essayons de rattacher n'a pas été détaché, il est possible de forcer son détachement de la console précédente avec l'option "-d", ou d'avoir plusieurs attachements simultanés (option "-x", voir "Partager un terminal").
</note>

==== Créer un nouveau terminal ====

Taper la suite de touche clavier suivante : [CTRL]+[a] suivi de [c]

Si vous avez auparavant exécuté une commande le contenu du terminal devrait visiblement changer.

==== Naviguer entre les terminaux du screen ====

    * [CTRL]+[a] suivi de [n]: pour next, aller au terminal suivant.
    * [CTRL]+[a] suivi de [p]: pour previous, aller au terminal précédent.
    * [CTRL]+[a] suivi de [0]..[9]: aller au terminal n.
    * [CTRL]+[a] suivi de [']: saisir dans le prompt le numéro du terminal.
    * [CTRL]+[a] suivi de ["]: propose la liste des différents terminaux, avec la possibilité d'en choisir un.
    * [CTRL]+[a] suivi de [w]: Lister les consoles actuelles avec leur nom.
    * [CTRL]+[a] suivi de [a]: retourne au terminale d'où l'on vient.
    * [CTRL]+[a] suivi de [A]: pour nommer les terminaux et s'y rendre par la suite plus aisément.


====  Fermer un terminal ====

<code>exit</code>

    * [CTRL]+[D] : fermer une console //screen//. Lorsqu’il n’y a plus qu’une seule console, ça quitte //screen//.

==== Détacher screen ====

    * [CTRL]+[a] suivi de [d]: pour détacher //screen//
    * [CTRL]+[a] suivi de [DD]: pour détacher //screen// et fermer la session

==== Partager un terminal ====

Imaginez que vous vouliez que quelqu'un fasse quelque chose à distance sur votre machine, mais que vous souhaiteriez voir ce qu'il fait, alors **Screen** va vous aider :)

  * Lancer screen sur votre machine
<code>screen -S toto</code>

Votre ami se connecte sur votre machine via [[:ssh]] par exemple et tape la commande suivante
<code>screen -x toto</code>

À partir de là, tout ce qui est tapé dans un des 2 terminaux (le vôtre ou le sien) apparaît sur les deux. Si il n'y a qu'un seul screen de lancé, il n'est pas nécessaire de préciser son nom lors de la connexion.


===== Raccourcis supplémentaires =====

Séparation de la console :
    * [CTRL]+[a] suivi de [S]: Sépare la console courante en deux consoles (la console courante devient celle du dessus).
    * [CTRL]+[a] suivi de [TAB]: Une fois la console séparée, ce raccourci permet de se positionner sur la console suivante.
    * [CTRL]+[a] suivi de [Q]: Supprime toutes les consoles, sauf la console courante.
    * [CTRL]+[a] suivi de [K]: Supprime la console courante.
<note tip>A noter que la suppression d'une ou plusieurs régions ne supprime pas les console qui s'y trouvaient.
</note>

Divers :
    * [CTRL]+[a] suivi de [F]: Redimensionnement de la fenêtre à la taille de son terminal. Utile lorsque l'on est plusieurs sur une même console et que l'on enrage de ne pas avoir un écran 16/9e.
    * [CTRL]+[a] suivi de [H]: Permet de logguer tout ce qui passe à l'écran dans un fichier $HOME/screenlog.XX (XX : no de la console)
    * [CTRL]+[a] suivi de [?]: Affiche une petite aide

Déplacement et copie :
    * [CTRL]+[a] suivi de [ESC]: Entre en mode copie/scrollback. On peut se déplacer dans le screen avec les flèches directionnelles.
    * ENTER : Permet de commencer une sélection. Appuyer une nouvelle fois sur ENTER pour terminer la sélection.
    * [CTRL]+[a] suivi de []]: Colle le contenu sélectionné précédemment. 


===== Personnaliser son screen =====

Il est possible d'avoir un fichier de configuration spécifique. Un exemple de "screenrc" est disponible dans /etc/screenrc. Il vous suffit de faire :
<code> cp /etc/screenrc ~/.screenrc</code>
Et vous pourrez ensuite le personnaliser comme bon vous semble. 
<note tip>Il est possible de changer le caractère d'échappement (CTRL+a). De cette manière, vous avez un caractère d'échappement sur votre machine et un différent sur une machine distante. Et grâce à cela, vous pouvez faire du screen dans un screen. </note>

===== Liens =====

  * Les pages du manuel **man screen** et **info screen**
  * La page du projet [[http://www.gnu.org/software/screen]] (en)
  * [[http://www.ddmdllt.org/weblog/posts/2008/10/27/screen-ssh-et-autres-joies/|Un article sur screen]] parut sur le planet de l'APRIL
  * [[http://postit.petitchevalroux.net/linux/screen-tutoriel-video-linux.191.html|Tutoriel video de screen]]
----

//Contributeurs : Termitor, Benoît « Beny » Pineau, [[utilisateurs:loack]], [[utilisateurs:petitchevalroux]], [[utilisateurs:gardouille]], boubou_cs//